package _02searchingAndSorting;


import javax.security.auth.kerberos.KerberosTicket;

//递归小练习
public class Demo1 {
    /**
     * 1.求阶乘
     * f1(n)求n的阶乘 -> f1(n - 1) 求n-1的阶乘
     * 找重复：n*(n - 1)的阶乘，求(n - 1)的阶乘是原问题的重复（规模更小） -- 子问题
     * 找变化：变化的量作为参数
     * 找边界：出口
     */
    static int f1(int n) {
        if (n == 1){
            return 1;
        }
        return n * (n - 1);
    }

    /**
     * 2.打印i-j
     * 找重复：
     * 找变化：变化的量作为参数
     * 找边界：出口
     */

    static void f2(int i, int j) {
        if (i > j) {
            return;
        }
        System.out.print(i);
        f2(i + 1, j);
    }

    /**
     * 3.数组求和
     * 对arr的所有元素求和
     * 找重复：
     * 找变化：变化的量作为参数
     * 找边界：出口
     */
    static int f3(int[] arr, int begin) {
        if (begin == arr.length - 1) {
            return arr[begin];
        }
        return arr[begin] + f3(arr, begin + 1);
    }

    static String reverse(String str, int end) {
        if (end == 0) {
            return "" + str.charAt(end);
        }
        return str.charAt(end) + reverse(str, end - 1);
    }

    static int fib(int n) {
        if(n == 2 || n == 1) {
            return 1;
        }
        return fib(n - 1) + fib (n - 2);
    }

    public static void main(String[] args) {
//        f2(1, 10);
        System.out.println(f3(new int[]{1, 2, 3, 4, 5, 6}, 0));
    }
}
